// Command visible is a chromedp example demonstrating how to wait until an
// element is visible.
package main

import (
	"context"
	"github.com/chromedp/chromedp"
	"log"
	"time"
)

func main() {
	input := make(chan struct{})
	//
	//fileBuf, err := os.ReadFile("./index.html")
	//if err != nil {
	//	fmt.Printf("Unable to open file %s, error: %s\n", os.Args[1], err.Error())
	//	os.Exit(1)
	//}
	//indexHTML = string(fileBuf)

	// run server
	// go testServer(fmt.Sprintf(":%d", *port))

	// create context: visible.
	//ctx, _ := chromedp.NewExecAllocator(
	//	context.Background(),
	//
	//	// 以默认配置的数组为基础，覆写headless参数
	//	// 当然也可以根据自己的需要进行修改，这个flag是浏览器的设置
	//	append(
	//		chromedp.DefaultExecAllocatorOptions[:],
	//		chromedp.Flag("headless", false), //打开浏览器,视图可视化.
	//		//chromedp.NoSandbox,
	//		//chromedp.DisableGPU,
	//		//chromedp.NoFirstRun,
	//		//chromedp.NoDefaultBrowserCheck,
	//		chromedp.WindowSize(540, 960),
	//
	//		// TODO: 如何加速浏览器呈现.
	//		//禁用网络安全标志
	//		//chromedp.Flag("disable-web-security", true),
	//		//关闭插件支持
	//		//chromedp.Flag("disable-extensions", true),
	//		//关闭默认浏览器检查
	//		//chromedp.Flag("disable-default-apps", true),
	//	)...,
	//)

	ctx, _ := chromedp.NewExecAllocator(
		context.Background(),

		// 以默认配置的数组为基础，覆写headless参数
		// 当然也可以根据自己的需要进行修改，这个flag是浏览器的设置
		append(
			chromedp.DefaultExecAllocatorOptions[:],
			chromedp.NoSandbox,
			chromedp.DisableGPU,
			chromedp.NoFirstRun,
			chromedp.NoDefaultBrowserCheck,
			//禁用网络安全标志
			chromedp.Flag("disable-web-security", true),
			//关闭插件支持
			chromedp.Flag("disable-extensions", true),
			//关闭默认浏览器检查
			chromedp.Flag("disable-default-apps", true),
			chromedp.WindowSize(540, 960),
		)...,
	)

	// 创建新的chromedp上下文对象，超时时间的设置不分先后
	// 30s关闭,
	// var cancel context.CancelFunc
	ctx, _ = context.WithTimeout(ctx, 3600*time.Second)
	ctx, cancel := chromedp.NewContext(ctx)
	defer cancel()

	// run task list
	err := chromedp.Run(ctx, visible("http://192.168.240.43:9088/#/pages/test/index1"))
	if err != nil {
		log.Fatal(err)
	}

	_ = <-input
}

func visible(host string) chromedp.Tasks {
	return chromedp.Tasks{
		chromedp.Navigate(host),
	}
}
